Load testing generally refers to the practice of modeling an expected usage of a software system by simulating multiple users concurrently accessing services of the system prior to deploying the software program to its intended users. Load testing is often relevant for multiple-user systems that are based on using a client/server model such as web servers. Other types of software systems, however, can be load-tested. In one example, a word processor or graphics editor program can be forced to read an extremely large document during a test, and another example is a financial program forced to generate a report from several years of data.
The term load testing is often used synonymously with performance testing, reliability testing, performance validation, volume testing, and so on. One form of load testing can include stress testing, which occurs when a load placed on a system is raised beyond normal usage patterns in order to test the response of the system at unusually high loads. Load testing can be used to determine response times, the number of visitors and users a web site can handle, response times, what can be done to allow the web site to handle more visitors and user, what can be done to increase response times, and so on.
Load testing can occur with actual or theoretical, loads. Although actual loads provide more accurate results than theoretical loads, employing hundreds or thousands of actual users to test a system is too often impractical. In these cases, load testing includes a load testing program that generates virtual users to stress the system. One example can include load testing a bookstore web server prior to making available what is expected to be a very popular book. One or more tests can be created with a load testing program to simulate multiple virtual users accessing the website in one or more different ways. The effect of these tests on the system are recorded and analyzed to determine if the web server is ready for the launch of the book or whether changes need to be made to web server.
This example is representative of a common and relatively straight-forward load test. The client server/model in this example involves an architecture based on a thin client, such as a program running through a web browser, communicating with a web server.
Difficulties exist, however, in designing and running load test for a smart client communicating with a server using a managed environment. The common load test where the client/server communication is recorded and analyzed does not work for this system because the communications are typically binary or encrypted.
In order to overcome this difficulty, load test engineers record on the client side application program interface and manually generate a script using the client side programming classes and methods. Unfortunately, this approach is also problematic. For example, the load test engineer must have a detailed knowledge of the client side architecture, class diagrams, and other technical aspects of the client. Also, the process of generating a script is time consuming, iterative, and error prone. Also, this often takes days of work to complete. Even once completed, the script is often inefficient and is unintentionally designed to test either too much or too little, which results in inaccurate or unreliable test data. Currently, managed environments are considered the most challenging and difficult projects in load testing.